#include "SettingsListeProfils.h"

SettingsListeProfils::SettingsListeProfils(Client *parent, QLineEdit *ip, QLineEdit *port, QLineEdit *pass, QLineEdit *nick, QLineEdit *nomProfil, QTreeView *listeProfils) :
        QSettings("Client.ini", QSettings::IniFormat)
{
    this->parent = parent;
    this->ip = ip;
    this->port = port;
    this->pass = pass;
    this->nick = nick;
    this->nomProfil = nomProfil;
    this->listeProfils = listeProfils;
    this->string = new QString();
    modele = new QStandardItemModel(this);
    modele->setColumnCount(2);
    listeProfils->setModel(modele);
    listeProfils->setEditTriggers(QAbstractItemView::NoEditTriggers); // la liste des profils n'est pas éditable.
    listeProfils->header()->hide(); //  cache le titre de la colonne.


    // prefixe pour la liste des profils.
    beginGroup("listeProfils");

    nbProfils = value("nbProfils", -1).toInt();
    // si le fichier est vierge on initialise la cle/valeur nbProfils à 0;
    if(nbProfils == -1)
    {
        nbProfils = 0;
        setValue("nbProfils", 0);
    }
    else
    {
        majListe();
    }

    connect(listeProfils, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_listeProfils_doubleClicked(QModelIndex)));
    connect(listeProfils, SIGNAL(doubleClicked(QModelIndex)), listeProfils, SLOT(expand(QModelIndex)));
}

SettingsListeProfils::~SettingsListeProfils()
{
    if(string) delete string;
}

void SettingsListeProfils::ajouterProfil()
{
    *string = value("nbProfils").toString();
    beginGroup(*string);
    setValue("nom", nomProfil->text());
    setValue("ip", ip->text());
    setValue("port", port->text());
    setValue("nick", nick->text());
    setValue("pass", pass->text());
    endGroup();
    ++nbProfils;
    setValue("nbProfils", nbProfils);
    //MAJ liste
    majListe();
}

void SettingsListeProfils::supprimerProfil(const QString &idProfil)
{
    //beginGroup(idProfil);

}


void SettingsListeProfils::majListe()
{
    QList<QStandardItem *> listeItems = modele->takeColumn(0);
    QList<QStandardItem *> listeSousItems;
    foreach(QStandardItem * i, listeItems)
    {
        if(i)
        {
            //listeSousItems = i->takeColumn(0);
            //foreach(QStandardItem * j, listeItems)
            //{
                //delete j;
            //}
            delete i;
            //listeSousItems.clear();
        }
    }
    listeItems.clear();
    modele->clear();

    QStandardItem *item;
    QStandardItem *sousItem;
    for(int i = 0; i < nbProfils; ++i)
    {
        *string = QString::number(i);
        item = new QStandardItem(value(*string + "/nom").toString());
        sousItem = new QStandardItem("ip: " + value(*string + "/ip").toString());
        sousItem->setSelectable(false);
        sousItem->setEnabled(false);
        listeSousItems << sousItem;
        sousItem = new QStandardItem("port: " + value(*string + "/port").toString());
        sousItem->setSelectable(false);
        sousItem->setEnabled(false);
        listeSousItems << sousItem;
        sousItem = new QStandardItem("pseudo: " + value(*string + "/nick").toString());
        sousItem->setSelectable(false);
        sousItem->setEnabled(false);
        listeSousItems << sousItem;
        sousItem = new QStandardItem("pass: " + value(*string + "/pass").toString());
        sousItem->setSelectable(false);
        sousItem->setEnabled(false);
        listeSousItems << sousItem;
        sousItem = new QStandardItem(*string);
        sousItem->setSelectable(false);
        sousItem->setEnabled(false);
        listeSousItems << sousItem;
        item->appendColumn(listeSousItems);
        listeItems << item;
        listeSousItems.clear();
    }

    modele->appendColumn(listeItems);
}

void SettingsListeProfils::on_listeProfils_doubleClicked(QModelIndex i)
{
    QStandardItem *item = modele->itemFromIndex(i);
    if(item->isEnabled())
    {
        QString string = item->child(4)->text();
        this->parent->connexionParProfil(value(string + "/ip").toString(), value(string + "/port").toString(), value(string + "/nick").toString(), value(string + "/pass").toString());
    }
}
